Agilizar tres flujos/pasos de trabajo importantes de Shiny:
inicio ciclo de desarrollo crear aplicación, realizar cambios y experimentar con los resultados.
depuración de errores, típico ciclo donde pruebas, descubres qué salió mal con tu código y modificas para solucionarlo. Vuelves a empezar el ciclo hasta no detectar más errores.
reprex: Escribir un fragmento de código autónomo, pequeño, que ilustra un problema. Se usa para obtener ayuda de otras personas sin necesidad de conocer toda la aplicacion.
Si vamos a crear muchas ShinyApp, conviene acelerar los procesos de desarrollo.
Tenemos dos momentos que podemos agilizar:
1.1 Creación de la aplicación: El esqueleto de la aplicación es siempre igual
1.2 Ciclo modificar código < = > probar/obtener resultados Es un proceso que haremos muchas veces hasta obtener los resultados esperados. Es muy tedioso…
File-> New File -> R Script
Luego atajo shinyapp + Tab
File-> New File -> Shiny Web app
File-> New Project -> Shiny Application
Con Rscript
Con Shiny Web Application
Ventana Emergente y Consola
- Escribe algo de código.
- Inicia app: `Cmd/Ctrl` + `Shift` + `Enter`.
- Experimenta con la aplicación.
- Cierra la aplicación.
- Volver al paso 1.
Background Jobs y Viewer
Cuando empiezas a escribir código generalmente se presentan errores. Nos centraremos en 3 de los principales de errores que te puedes encontrar:
Para empezar con debug de scripts: Jenny Bryan rstudio::conf(2020).
Cuando tenemos un error inesperado:
f <- function(x) g(x)
g <- function(x) h(x)
h <- function(x) x * 2
f("a")
library(shiny)
f <- function(x) g(x)
g <- function(x) h(x)
h <- function(x) x * 2
ui <- fluidPage(
selectInput("n", "N", 1:10),
plotOutput("plot")
)
server <- function(input, output, session) {
output$plot <- renderPlot({
n <- f(input$n)
plot(head(cars, n))
}, res = 96)
}
shinyApp(ui, server)
Es la herramienta más potente para investigar un error. Hay dos maneras de iniciar el depurador:
HERRAMIENTA
browser()
.
.
.
Debugger
VENTAJA
Funciona tambien en Shiny Puede ser condicional su procesamiento
Agregar puntos de interrupcion
DESVENTAJA
Ensucia Fuente (recordar eliminarlo)
.
No es tan sencillo ver las variables
if (input$value == "a") {
browser()
}
# Or maybe
if (my_reactive() < 0) {
browser()
}
Un reprex es simplemente código R que funciona al copiarlo y pegarlo en una sesión de R en otro equipo. Aquí tenemos un reprex simple para una aplicación Shiny:
library(shiny)
ui <- fluidPage(
selectInput("n", "N", 1:10),
plotOutput("plot")
)
server <- function(input, output, session) {
output$plot <- renderPlot({
n <- input$n * 2
plot(head(cars, n))
})
}
shinyApp(ui, server)
Se llama reprex a:
un ejemplo reproducible
un paquete de R en CRAN para hacer ejemplos reproducibles, que tambien esta incluido en tidyverse
una función del paquete :reprex: para hacer que tu código sea un ejemplo reproducible:
reprex::reprex()
Es un código que informa sobre un problema que tenemos y que sirve para que nos ayuden a encontrar una solución.
Se usa para postear en Slack, en Stackexchage, en RStudio community, como un Issue en Gitlab o Github, o en cualquier lugar donde querés pedir ayuda.
Es de extensión mínima, incluye solo las lineas de codigo realmente necesarias.
Es autocontenido (carga todos los paquetes necesarios, crea todos los objetos necesarios)
Es reproducible (puede correrse)
Usa un conjunto de datos los mas pequeño y simple posible, preferentemente los que vienen con los paquetes instalados con R (ej. iris, mtcars) o una muestra que se generan en el mismo codigo
Presenta no sólo las líneas de código sino también las salidas como comentarios
Puede también incluir toda la información de la session donde se corrió y se presentó el problema.
Evita copiar/pegar de la consola sin que los demas sepan qué paquetes y datos usaste.
Evita hacer capturas de pantalla de la sesion de R para comunicar un problema. No se tiene que reescribir todo!
El código corre sin problemas en cualquier computadora! Asi que si querés abrir una sesión nueva de R, lo abrís o lo pegas y lo corres!
Si no querés, no es necesario correr el código, porque también suele incluir las salidas.
En el proceso de crearlo suele encontrarse la solución al problema!
Empezar la sesión con library(reprex) en la consola (no lo llama tidyverse)
Armar el código del reprex
Opción 1. Correr en la consola `reprex()`, se genera el reprex y te lo muestra en el Viewer. Lo copiás y pegás donde corresponda.
Opción 2. Desde RStudio addins seleccionar REPREX y elegir las opciones mas convenientes segun la salida buscada
Todas las entradas y salidas de la UI estan relacionadas con el problema?
Se puede simplificar el layout dejando sólo lo necesario?
Hay reactives en el server() que se puedan remover?
Necesitas todos los paquetes cargados para ilustrar el problema?
Quitaste ya todo aquello que no funcionó?
5.3.1 reprex basics
5.3.4 posteo de Scott Novogoratz en RStudio community
Agradecimiento a Yanina Bellini por su Taller Hermosas presentaciones con Quarto